package com.daji.reference;

import com.daji.pojo.SubUser;
import com.daji.pojo.User;

/*
*  测试java的引用
* */
public class TestReference {

    public static void main(String[] args) {
        User user = new User("username", "password", 18,new SubUser("22"));
        System.out.println(user);

        //下面的代码会报空指针异常
        /*User user2;
        user2.setUserName("wzr");
        user2.setAge(18);
        System.out.println(user2);*/

        test_m(user);
        System.out.println("finally:"+user);    //(userName=finallymodify, passWord=password, age=18)
    }

    public static void test_m(User a) {     //这个a只是个形参引用。调用时，传进来的user，就是让a指向了user
        a.setUserName("finallymodify");     //对user所在内存的那块区域进行更改
        User b = new User();

        b.setAge(180);
        b.setUserName("modify");

        a = b;  //将a指向了b的内存地址（现在a已经不指向user了！！！）
        System.out.println("test1 a="+a);   //现在a和b都指向了同一块（也就是b），所以这一行和下一行的执行结果一样
        System.out.println("test1 b="+b);   //test1 b=User(userName=modify, passWord=null, age=180)
        a.setUserName("modifya");           //对a所在地址进行改变，由于a和b指向了同一块，所以下两行的执行结果也一致
        System.out.println("test2 a="+a);   //(userName=modifya, passWord=null, age=180)
        System.out.println("test2 b="+b);

    }


}
